<?php

class Juicios_JuicioController extends Zend_Controller_Action {
    
    private $_movimientoDao;
    
    public function init() {
        
        $auth = Zend_Auth::getInstance();

        if ($auth->hasIdentity()) {
            if (!empty($auth->getIdentity()->id)) {
                $usuarioDao = new Doctrine_Model_UsuariosDoctrineDao();
                $this->view->usuario = $usuarioDao->obtenerPorId($auth->getIdentity()->id);
            }
        } else {
            $this->_helper->redirector('index', 'login', 'admin');
        }
        
        $this->_flashMessenger = $this->_helper->FlashMessenger;
        
        /* Colores */
        $colores = array(
            '5b92d6' => array('5b92d6', '8fbaef'), //azul
            'd6d65b' => array('d6d65b', 'bfbf3f'), //amarillo
            '51ad56' => array('51ad56', '73be78'), //verde
            'db6f70' => array('db6f70', 'e59899'), //rojo
            '5e71a0' => array('5e71a0', '8e9cbc'), //azul oscuro
            'd68e5b' => array('d68e5b', 'e8a97c'), //naranja
            '92989f' => array('92989f', 'bbbec3')); //gris
        $this->view->colorSucursal = $colores[$this->view->usuario->getSucursal()->getColor()];
        /* Colores */
        
        $this->_session = new Zend_Session_Namespace('tema');

        if ($this->_session->tema) {
            $this->view->logo = 'logoVerde.jpg';
            $this->view->colorFondo = '#4D9473';
            $this->view->colorFuente = '#FFF';
            $this->view->colorFuenteContenido = '#000';
            $this->view->colorContenido = '#C6DC94';
            $this->view->colorMenu = 'navbar-inverse';
            $this->view->colorFondoMenuLateral = '#DFDFDF';
        } else {
            $this->view->logo = 'logoBlanco.jpg';
        }
        
        $this->_movimientoDao = new Doctrine_Model_MovimientoDao();
        $this->_referencias = new Doctrine_Model_ReferenciasDoctrineDao();
        $this->_personaDao = new Doctrine_Model_PersonaDao();
        $this->_juicioDao = new Doctrine_Model_JuicioDao();
        $this->_usuarioDao = new Doctrine_Model_UsuarioDoctrineDao();
        $this->_creditoDao = new Doctrine_Model_CreditoDao();
        $this->_juicioCobroDao = new Doctrine_Model_JuicioCobroDao();
    }

    public function indexAction() {
        
    }
    
    public function registrarAction(){
        
        $this->view->titulo = "Registrar Juicio";
        
        $cliente_id = $this->getRequest()->getParam("cliente_id", null);
        $juicio_id = $this->getRequest()->getParam("juicio_id", null);
        $cobro_id = $this->getRequest()->getParam("cobro_id", null);
        
        $juicio = null;
        $cobros = null;
        $cliente = null;
        $cobro = null;
        $creditos_activos = new \Doctrine\Common\Collections\ArrayCollection();
        $credito_cancelado = null;
        
        if ($cliente_id): /* nuevo juicio */
            $cliente = $this->_personaDao->obtenerPorId($cliente_id);
        
            if (!$cliente):
                $this->_flashMessenger->addMessage(array("error" => "No existe la persona.  aa"));
                $this->_helper->redirector('persona', 'busqueda', 'usuarios');
            endif;
        
        elseif ($juicio_id): /* actualiza juicio */
            $this->view->titulo = "Datos Juicio";
        
            //$juicio = new Doctrine_Model_Entities_Juicio();
            $juicio = $this->_juicioDao->obtenerPorId($juicio_id);
            
            if ($juicio):
                $cliente = $juicio->getCliente();
                $cobros = $juicio->getCobros();
                $cobro = $juicio->getCobroPorId($cobro_id);
            else:
                $this->_flashMessenger->addMessage(array("error" => "No existe el juicio."));
                $this->_helper->redirector('persona', 'busqueda', 'usuarios');
            endif;
        
        else:
            $this->_flashMessenger->addMessage(array("error" => "No existe la persona. xx"));
            $this->_helper->redirector('persona', 'busqueda', 'usuarios');
        endif;
        
        $usuarios = $this->_usuarioDao->obtenerTodos();
        
        $abogados = array(array("id" => 1, "nombre" => "Lucas"), array("id" => 2, "nombre" => "Gabriel"), array("id" => 3, "nombre" => "Eugenia"));
        
        if ($cliente):
            $creditos_activos = $cliente->obtenerCreditosActivos();
            if ($juicio && $juicio->esTerminado()):
                $credito_cancelado = $juicio->getCredito();
            endif;
        endif;
        
        $this->view->estados_juicios = $this->_referencias->obtenerTodos("Doctrine_Model_Entities_EstadoJuicio");
        
        $this->view->abogados = $abogados;
        $this->view->usuarios = $usuarios;
        if ($credito_cancelado):
            $creditos_activos->add($credito_cancelado);
        endif;
        $this->view->creditos_activos = $creditos_activos;
        
        $this->view->cliente = $cliente;
        $this->view->juicio = $juicio;
        $this->view->cobros = $cobros;
        $this->view->cobro = $cobro;
        
        $this->view->mensajes = $this->_flashMessenger->getMessages();
        
    }
    
    public function guardarAction() {
        
        $this->_helper->viewRenderer->setNoRender();
        $this->_helper->getHelper('layout')->disableLayout();
        
        if ($this->getRequest()->isPost()):
            
            $datos = $this->getRequest()->getParams();
        
            $juicio_id = $this->getRequest()->getParam("juicio_id", null);
            $cliente_id = $this->getRequest()->getParam("cliente_id", null);
            $fecha_inicio = $this->getRequest()->getParam("fecha_inicio", null);
            
            $juicio = null;
            if (!$juicio_id && isset($datos["guardar"]) && $cliente_id):
                $juicio = new Doctrine_Model_Entities_Juicio();
            
                $cliente = $this->_personaDao->obtenerPorId($cliente_id);
                if (!$cliente):
                    $this->_flashMessenger->addMessage(array("error" => "No se encontro al cliente."));
                    $this->_helper->redirector('registrar', 'juicio', 'juicios', array("cliente_id" => $cliente_id));
                endif;
            
                $juicio->setFechaCreacion(new DateTime());
            elseif ($juicio_id && isset($datos["actualizar"])):
                $juicio = $this->_juicioDao->obtenerPorId($juicio_id);
                if (!$juicio):
                    $this->_flashMessenger->addMessage(array("error" => "No se encontro el juicio."));
                    $this->_helper->redirector('registrar', 'juicio', 'juicios', array("cliente_id" => $cliente_id));
                endif;
                $cliente = $juicio->getCliente();
                $juicio->setFechaModificacion(new DateTime());
            else:
                $this->_flashMessenger->addMessage(array("error" => "Error al intentar crear el juicio. Datos faltantes."));
                $this->_helper->redirector('registrar', 'juicio', 'juicios', array("cliente_id" => $cliente_id));
            endif;
            
            if (!$fecha_inicio):
                $this->_flashMessenger->addMessage(array("error" => "Fecha de inicio requerida."));
                $this->_helper->redirector('registrar', 'juicio', 'juicios', array("cliente_id" => $cliente_id));
            endif;
            
            $abogado_id = $this->getRequest()->getParam("abogado", null);
            $usuario_a_cargo_id = $this->getRequest()->getParam("usuario", null);
            $juzgado = $this->getRequest()->getParam("juzgado", null);
            $nro_cuenta = $this->getRequest()->getParam("nro_cuenta", null);
            $creditos = $this->getRequest()->getParam("creditos", array());
            $monto_capital = $this->getRequest()->getParam("monto_capital", null);
            $intereses_costas = $this->getRequest()->getParam("intereses_costas", null);
            $timbrado = $this->getRequest()->getParam("timbrado", null);
            $ius_bonos = $this->getRequest()->getParam("ius_bonos", null);
            
            $pago_gastos = $this->getRequest()->getParam("pago_gastos", 0);
            $fecha_pago_gastos = $this->getRequest()->getParam("fecha_pago_gastos", null);
            
            $tasa1 = $this->getRequest()->getParam("tasa1", null);
            $tasa2 = $this->getRequest()->getParam("tasa2", null);
            $total = $this->getRequest()->getParam("total", null);
            
            $embargo = $this->getRequest()->getParam("embargo", null);
            $sentencia = $this->getRequest()->getParam("sentencia", null);
            
            $fecha_cobro_juicio = $this->getRequest()->getParam("fecha_cobro_juicio", null);
            $monto_cobro_juicio = $this->getRequest()->getParam("monto_cobro_juicio", null);
            
            $observaciones = $this->getRequest()->getParam("observaciones", null);
            
            $usuarioACargo = $this->_usuarioDao->obtenerPorId($usuario_a_cargo_id);
            
            $creditos_actuales = $juicio->getCreditos();
            foreach ($creditos_actuales as $ca):
                if (!in_array($ca->getId(), $creditos)):
                    $ca->setJuicio(null);
                    $this->_creditoDao->guardar($ca);
                endif;
            endforeach;         
            
            $juicio->vaciarCreditos();
            if ($creditos):
                foreach ($creditos as $credito_id):
                    $unCredito = $this->_creditoDao->obtenerPorId($credito_id);
                    $unCredito->setJuicio($juicio);
                    $juicio->agregarCredito($unCredito);
                endforeach;
            endif;
            
            if (!$cliente):
                $this->_flashMessenger->addMessage(array("error" => "Dato requeridos."));
                $this->_helper->redirector('persona', 'busqueda', 'usuarios');
            endif;
            
            $juicio->setCliente($cliente);
            $fechaInicio = DateTime::createFromFormat("d/m/Y", $fecha_inicio);
            $juicio->setFechaInicio($fechaInicio);
            $juicio->setAbogado($abogado_id);
            $juicio->setUsuarioACargo($usuarioACargo);
            $juicio->setJuzgado($juzgado);
            $juicio->setNroCuenta($nro_cuenta);
            $juicio->setMontoEmbargo($monto_capital);
            $juicio->setInteresesCostas($intereses_costas);
            $juicio->setTimbrado($timbrado);
            $juicio->setIusBonos($ius_bonos);
            
            if ($pago_gastos && $fecha_pago_gastos):                
                $fechaPagoGastos = DateTime::createFromFormat("d/m/Y", $fecha_pago_gastos);
                $juicio->setFechaPagoGastos($fechaPagoGastos);
            else:
                $juicio->setFechaPagoGastos(null);
            endif;
            
            $embargo = $embargo ? 1 : 0;
            $juicio->setOficioEmbargo($embargo);
            $sentencia = $sentencia ? 1 : 0;
            $juicio->setSentencia($sentencia);
            
            $estadoJuicio = $this->_referencias->obtenerPorId("Doctrine_Model_Entities_EstadoJuicio", 1);
            $juicio->setEstadoJuicio($estadoJuicio);
            
            if ($fecha_cobro_juicio):
                $fechaCobroJuicio = DateTime::createFromFormat("d/m/Y", $fecha_cobro_juicio);
                $juicio->setFechaCobroJuicio($fechaCobroJuicio);
                $juicio->setMontoCobroJuicio($monto_cobro_juicio);
            else:
                $juicio->setFechaCobroJuicio(null);
                $juicio->setMontoCobroJuicio(0);
            endif;

            $juicio->setObservaciones($observaciones);
            $juicio->setUsuario($this->view->usuario);
            
            if ($this->_juicioDao->guardar($juicio)):                
                $this->_flashMessenger->addMessage(array("success" => "Juicio guardado."));
                $this->_helper->redirector('registrar', 'juicio', 'juicios', array("juicio_id" => $juicio->getId()));
            else:
                $this->_flashMessenger->addMessage(array("error" => "Error al intentar guardar el juicio."));
                $this->_helper->redirector('registrar', 'juicio', 'juicios', array("juicio_id" => $juicio->getId()));
            endif;
            
        endif;
        
        $this->_flashMessenger->addMessage(array("error" => "Error al intentar registrar el credito."));
        $this->_helper->redirector('registrar', 'index', 'juicios');
        
    }
    
    public function guardarcobroAction() {
        
        $this->_helper->viewRenderer->setNoRender();
        $this->_helper->getHelper('layout')->disableLayout();
        
        if ($this->getRequest()->isPost()):
            
            $datos = $this->getRequest()->getParams();
            
            $juicio_id = $this->getRequest()->getParam("juicio_id");
            $cobro_id = $this->getRequest()->getParam("cobro_id");
            
            $fecha_cobro = $this->getRequest()->getParam("fecha_cobro", null);
            $monto_cobro = $this->getRequest()->getParam("monto_cobro", null);
            
            if (!$fecha_cobro):
                $this->_flashMessenger->addMessage(array("error" => "Datos requeridos."));
                $this->_helper->redirector('registrar', 'juicio', 'juicios');
            endif;
            
            $juicio = null;
            if ($juicio_id):
                $juicio = $this->_juicioDao->obtenerPorId($juicio_id);
                if (!$juicio):
                    $this->_flashMessenger->addMessage(array("error" => "No se encontro el juicio."));
                    $this->_helper->redirector('registrar', 'juicio', 'juicios');
                endif;
            else:
                $this->_flashMessenger->addMessage(array("error" => "Falta el juicio."));
                $this->_helper->redirector('registrar', 'juicio', 'juicios');
            endif;
            
            $int_moratorios = $this->getRequest()->getParam("int_moratorios", null);
            $int_punitorios = $this->getRequest()->getParam("int_punitorios", null);
            $gastos_cobro = $this->getRequest()->getParam("gastos_cobro", null);
            $observacion_cobro = $this->getRequest()->getParam("observacion_cobro", null);
            
            if (isset($datos["guardar"])):
                $cobro = new Doctrine_Model_Entities_JuicioCobro();
                $cobro->setFechaCreacion(new DateTime());
            elseif ($cobro_id && isset($datos["actualizar"])):
                $cobro = $this->_juicioCobroDao->obtenerPorId($cobro_id);
                if (!$cobro):
                    $this->_flashMessenger->addMessage(array("error" => "No se encontro el cobro."));
                    $this->_helper->redirector('registrar', 'juicio', 'juicios', array("juicio_id" => $juicio_id));
                endif;
            endif;
            
            $cobro->setJuicio($juicio);
            $cobro->setFecha(DateTime::createFromFormat("d/m/Y", $fecha_cobro));
            $cobro->setCapital($monto_cobro);
            $cobro->setInteresesMoratorios($int_moratorios);
            $cobro->setInteresesPunitorios($int_punitorios);
            $cobro->setGastos($gastos_cobro);
            $cobro->setObservaciones($observacion_cobro);
            $cobro->setUsuario($this->view->usuario);
            
            if ($this->_juicioCobroDao->guardar($cobro)):
                
                /* Guardar movimiento (Caja Diaria) */
//                $movimiento = new Doctrine_Model_Entities_Entrada();
//                $movimiento->setFecha($cobro->getFecha());
//                $apellidoYNombres = $juicio->getCliente()->getApellido() . ', ' . $juicio->getCliente()->getNombres();
//                $apellidoYNombres = substr($apellidoYNombres, 0, 22);
//                $movimiento->setDescripcion(" " . $apellidoYNombres . " JUI N&#176;:" . $juicio->getId() . " COBRO (" . $cobro->getId() . ")");
//                $monto_total_cobro = $cobro->getCapital() + $cobro->getInteresesMoratorios() + $cobro->getInteresesPunitorios() + $cobro->getGastos();
//                $movimiento->setMonto($monto_total_cobro);
//                $movimiento->setCategoria($this->_referencias->obtenerPorId('Doctrine_Model_Entities_CategoriaMovimiento', 24));
//
//                $movimiento->setUsuario($this->view->usuario);
//                $movimiento->setCuota_id(null);
//                $this->_movimientoDao->guardar($movimiento);
                /* ****************** */
                
                $this->_flashMessenger->addMessage(array("success" => "Cobro guardado."));
                $this->_helper->redirector('registrar', 'juicio', 'juicios', array("juicio_id" => $juicio->getId(), "cobro_id" => $cobro->getId()));
            else:
                $this->_flashMessenger->addMessage(array("error" => "Error al intentar guardar el cobro."));
                $this->_helper->redirector('registrar', 'juicio', 'juicios', array("juicio_id" => $juicio->getId()));
            endif;
            
        endif;
        
        $this->_flashMessenger->addMessage(array("error" => "Error al intentar registrar el cobro."));
        $this->_helper->redirector('registrar', 'juicio', 'juicios', array("juicio_id" => $juicio_id));
        
    }
    
    public function listadoAction() {
        
    }
    
    public function nuevapromesaAction() {
       
        $this->view->headScript()->appendFile($this->view->baseUrl() . '/js/jquery.maskedinput-1.3.min.js');

        $this->view->cliente_id = $this->getRequest()->getParam("cliente_id");
        $fecha_actual = new DateTime();
        $this->view->fecha_actual = $fecha_actual->format("d/m/Y");

        $unaPersona = new Doctrine_Model_Entities_Persona();
      
    }

    public function terminarAction(){
        
        $this->_helper->viewRenderer->setNoRender();
        $this->_helper->getHelper('layout')->disableLayout();
        
        $unJuicio = null;
        
        if ($this->getRequest()->isPost()):

            $juicio_id = $this->getRequest()->getParam("juicio_a_terminar_id", null);
            $estado_juicio_id = $this->getRequest()->getParam("estado_terminacion_juicio", null);

            $unEstadoJuicio = $this->_referencias->obtenerPorId("Doctrine_Model_Entities_EstadoJuicio", $estado_juicio_id);
            
            $unJuicio = $this->_juicioDao->obtenerPorId($juicio_id);
            $unJuicio->setEstadoJuicio($unEstadoJuicio);         
            
            if ($this->_juicioDao->guardar($unJuicio)):
                
                /* cancelar credito asociado al juicio */
                $creditos_a_cancelar =  $unJuicio->getCreditos();
                $estadoCredito = $this->_referencias->obtenerPorId('Doctrine_Model_Entities_EstadoCredito', 4);
                foreach ($creditos_a_cancelar as $credito_a_cancelar):
                    $credito_a_cancelar->setEstado($estadoCredito);
                    $credito_a_cancelar->setFechaCancelado(new DateTime());
                    $cuotas_credito_a_cancelar = $credito_a_cancelar->saldarCuoatasPorCancelacionPorJuicio();
                    if (!$this->_creditoDao->guardar($credito_a_cancelar)):
                        $this->_flashMessenger->addMessage(array("error" => "Error al intentar Cancelar el Credito asociado."));
                        $this->_helper->redirector('registrar', 'juicio', 'juicios', array("juicio_id" => $unJuicio->getId()));
                    endif;
                endforeach;
                /* /cancelar credito asociado al juicio */ 
                
                $this->_flashMessenger->addMessage(array("success" => "Juicio Terminado"));
                $this->_helper->redirector('registrar', 'juicio', 'juicios', array("juicio_id" => $unJuicio->getId()));
            endif;

        endif;
        
        $this->_flashMessenger->addMessage(array("error" => "Error al intentar terminar el juicio"));
        $this->_helper->redirector('registrar', 'juicio', 'juicios', array("juicio_id" => $unJuicio->getId()));
    }

}

